﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BOAcademias;
using TOAcademias;
using System.Data;
using System.Drawing;

/*************************************
Autor: Carlos Sánchez
Fecha de Creación: 06/02/2011
Descripción de la Funcionalidad: Formulario que permite la consulta de los horarios
considerando los filtros por Socio, Instructor, Seccion o Infraestructura.
**************************************/   

public partial class TunkiFiles_Matricula_RegistrarMatricula : System.Web.UI.Page
{
    BOAcademia boAcademia = new BOAcademia();
    TOMatricula toMatricula = new TOMatricula();
    BOMatricula boMatricula = new BOMatricula();
    BOInstructor boInstructor = new BOInstructor();
    BOInfraestructura boInfraestructura = new BOInfraestructura();
    BOSeccion boSeccion = new BOSeccion();
    BOSocio boSocio = new BOSocio();
    BOMatriculaSeccion boMatriculaSeccion = new BOMatriculaSeccion();
    BOHorario boHorario = new BOHorario();


    void CargarInstructor()
    {
        ddlInstructor.DataSource = boInstructor.obtenerInstructors();
        ddlInstructor.DataTextField = "NombreCompleto";
        ddlInstructor.DataValueField = "Codigo";
        ddlInstructor.DataBind();
    }


    void CargarInfraestructura()
    {
        ddlInfraestructura.DataSource = boInfraestructura.obtenerInfraestructura();
        ddlInfraestructura.DataTextField = "Nombre";
        ddlInfraestructura.DataValueField = "Codigo";
        ddlInfraestructura.DataBind();    
    }


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            switch (Session["TipoUsuario"].ToString())
            {
                case "SOCIO":
                    txtCodSocio.Text = Session["CodigoPerfil"].ToString();
                    btnSocio_Click(sender, e);
                    txtCodSocio.ReadOnly = true;
                    break;
                default:
                    CargarInstructor();
                    CargarInfraestructura();
                    pnlFiltros.Visible = true;
                    break;
            }
        }
        lblMensaje.Text = "";
    }


    protected void btnSocio_Click(object sender, EventArgs e)
    {
        lblMensaje.Text = String.Empty;
        lblMensajeHorario.Text = String.Empty;

        String strCodSocio = txtCodSocio.Text.Trim();

        TOSocio toSocio = boSocio.obtenerSocioxCodigo(strCodSocio);
        if (toSocio != null)
        {
            lblNomSocio.Text = toSocio.Nombre.ToString();

            //Verificar si el socio tiene matricula en el periodo actual
            boMatricula = new BOMatricula();
            TOMatricula toMatricula = boMatricula.obtenerMatriculaxSocio(strCodSocio);
            if (toMatricula != null)
            {
                lblCodMatricula.Text = toMatricula.CodigoMatricula.ToString();
                lblMensaje.Text = String.Empty;
                habilitarHorarioxSocio(txtCodSocio.Text);
            }
            else
            {
                lblMensajeHorario.Text = "No presenta Horario por no encontrarse matriculado.";
            }
        }
        else
        {
            lblMensaje.Text = "Código No Existe";
            lblCodMatricula.Text = String.Empty;
            lblNomSocio.Text = String.Empty;
            limpiarHorario();
        }
    }

    protected void btnInstructor_Click(object sender, EventArgs e)
    {
        habilitarHorarioxInstructor(ddlInstructor.SelectedValue);
    }
    protected void btnSeccion_Click(object sender, EventArgs e)
    {
        habilitarHorarioxSeccion(txtSeccion.Text);
    }
    protected void btnInfraestructura_Click(object sender, EventArgs e)
    {
        habilitarHorarioxInfraestructura(ddlInfraestructura.SelectedValue);
    }

    #region Horarios


    private List<Button> FindControlRecursive(Control ctlRoot)
    {
        List<Button> listaBotones = new List<Button>();
        if (ctlRoot.ID != null)
        {
            if (ctlRoot.ID.Length == 6)
            {
                string strAux = ctlRoot.ID.Substring(0, 3);
                if (strAux.Equals("btn"))
                    listaBotones.Add((Button)ctlRoot);
            }
        }
        foreach (Control ctlC in ctlRoot.Controls)
        {
            List<Button> listaBoton = FindControlRecursive(ctlC);
            if (listaBoton != null)
            {
                foreach (Button btn in listaBoton)
                {
                    listaBotones.Add(btn);
                }
            }
        }

        return listaBotones;
    }

    public void limpiarHorario()
    {
        List<Button> listaBotones = FindControlRecursive(pnlHorario);
        List<TOHorario> listaHorario = new List<TOHorario>();

        foreach (Button btnBoton in listaBotones)
        {
            btnBoton.Height = 20;
            btnBoton.Font.Size = 8;
            btnBoton.BackColor = Color.White;
            btnBoton.Text = String.Empty;
            TOHorario toHorario = listaHorario.Find(delegate(TOHorario bk)
            {
                string strHora = "" + bk.Hora.ToString();
                string strButtonName = "btn" + bk.Dia.ToString() + "00";

                strButtonName = strButtonName.Substring(0, 6 - strHora.Length) + strHora;
                return btnBoton.ID == strButtonName;
            });
        }
    }

    public void habilitarHorarioxSocio(String CodigoSocio)
    {
        List<Button> listaBotones = FindControlRecursive(pnlHorario);
        List<TOHorario> listaHorario = new List<TOHorario>();

        listaHorario = boHorario.obtenerHorariosxSocio(CodigoSocio);

        foreach (Button btnBoton in listaBotones)
        {
            btnBoton.Height = 30;
            btnBoton.Font.Size = 8;
            btnBoton.BackColor = Color.White;
            btnBoton.Text = String.Empty;
            TOHorario toHorario = listaHorario.Find(delegate(TOHorario bk)
            {
                string strHora = "" + bk.Hora.ToString();
                string strButtonName = "btn" + bk.Dia.ToString() + "00";

                strButtonName = strButtonName.Substring(0, 6 - strHora.Length) + strHora;
                return btnBoton.ID == strButtonName;
            });


            if (toHorario != null)
            {
                btnBoton.BackColor = Color.Red;
                btnBoton.Text = toHorario.Cod_infraestructura + "\n" + toHorario.Cod_seccion;
            }

        }
    }

    public void habilitarHorarioxInstructor(String CodigoInstructor)
    {
        List<Button> listaBotones = FindControlRecursive(pnlHorario);
        List<TOHorario> listaHorario = new List<TOHorario>();

        listaHorario = boHorario.obtenerHorariosxInstructor(CodigoInstructor);

        foreach (Button btnBoton in listaBotones)
        {
            btnBoton.Height = 30;
            btnBoton.Font.Size = 8;
            btnBoton.BackColor = Color.White;
            btnBoton.Text = String.Empty;
            TOHorario toHorario = listaHorario.Find(delegate(TOHorario bk)
            {

                string strHora = "" + bk.Hora.ToString();
                string strButtonName = "btn" + bk.Dia.ToString() + "00";

                strButtonName = strButtonName.Substring(0, 6 - strHora.Length) + strHora;
                return btnBoton.ID == strButtonName;
            });


            if (toHorario != null)
            {
                btnBoton.BackColor = Color.Red;
                btnBoton.Text = toHorario.Cod_infraestructura + "\n" + toHorario.Cod_seccion;
            }

        }
    }

    public void habilitarHorarioxSeccion(String CodigoSeccion)
    {
        List<Button> listaBotones = FindControlRecursive(pnlHorario);
        List<TOHorario> listaHorario  = boHorario.obtenerHorariosxSec(CodigoSeccion);

        foreach (Button btnBoton in listaBotones)
        {
            btnBoton.Height = 20;
            btnBoton.Font.Size = 8;
            btnBoton.BackColor = Color.White;
            btnBoton.Text = String.Empty;
            TOHorario toHorario = listaHorario.Find(delegate(TOHorario bk)
            {

                string strHora = "" + bk.Hora.ToString();
                string strButtonName = "btn" + bk.Dia.ToString() + "00";

                strButtonName = strButtonName.Substring(0, 6 - strHora.Length) + strHora;
                return btnBoton.ID == strButtonName;
            });


            if (toHorario != null)
            {
                btnBoton.BackColor = Color.Red;
                btnBoton.Text = toHorario.Cod_infraestructura;
            }

        }
    }

    public void habilitarHorarioxInfraestructura(String CodigoInfraestructura)
    {
        List<Button> listaBotones = FindControlRecursive(pnlHorario);
        List<TOHorario> listaHorario = new List<TOHorario>();

        listaHorario = boHorario.obtenerHorariosxInf(CodigoInfraestructura);

        foreach (Button btnBoton in listaBotones)
        {
            btnBoton.Height = 30;
            btnBoton.Font.Size = 8;
            btnBoton.BackColor = Color.White;
            btnBoton.Text = String.Empty;
            TOHorario toHorario = listaHorario.Find(delegate(TOHorario bk)
            {

                string strHora = "" + bk.Hora.ToString();
                string strButtonName = "btn" + bk.Dia.ToString() + "00";

                strButtonName = strButtonName.Substring(0, 6 - strHora.Length) + strHora;
                return btnBoton.ID == strButtonName;
            });


            if (toHorario != null)
            {
                btnBoton.BackColor = Color.Red;
                btnBoton.Text = toHorario.Cod_infraestructura + "\n" + toHorario.Cod_seccion;
            }

        }
    }


    protected void Button1_Click1(object sender, EventArgs e)
    {

    }


    protected void btnCerrar_Click(object sender, EventArgs e)
    {

    }

    #endregion



}